#ifndef __MATH_H__
#define __MATH_H__
#include<math.h>

template<class Real>
class Math
{
public:
	static int iabs( int iv );
	static int iceil ( float fv );
	static int ifloor ( float fv );
	static int isign ( int iv );

	static Real abs( Real fv );
	static Real acos_t( Real fv );
	static Real asin_t( Real fv );
	static Real atan_t( Real fv );
	static Real atan2_t( Real fx, Real fy );
	static Real ceil_t( Real fv );
	static Real cos_t( Real fv );
	static Real exp_t( Real fv );
	static Real floor_t( Real fv );
	static Real log_t( Real fv );
	static Real pow_t( Real fb, Real fe );
	static Real sign_t( Real fv );
	static Real sin_t( Real fv );
	static Real sqrt_t( Real fv );
	static Real invsqrt( Real fv );
	static Real sqr( Real fv );
	static Real unit_random();
	static Real symmetric_random();

	static const Real INFINITY;
	static const Real PI;
	static const Real TWO_PI;
	static const Real HALF_PI;

	
};

typedef Math<int> Mathi;
typedef Math<float> Mathf;
#endif